package br.unicamp.ic.sgct.client.apresentacao.views;


import br.unicamp.ic.sgct.client.apresentacao.widgets.LabelCampoForm;
import br.unicamp.ic.sgct.client.dominio.to.ConferenciaTO;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLTable.Cell;
import com.google.gwt.user.client.ui.HTMLTable.RowFormatter;
import com.google.gwt.user.client.ui.VerticalPanel;
import java.util.List;
import org.gwtiger.client.widget.HoverGridWidget;

public class ViewListaConferencia extends Composite {


    
    private VerticalPanel panelListaConferencia = new VerticalPanel();
    private HoverGridWidget gridListaConferencia = new HoverGridWidget();
    private List<ConferenciaTO> conferencias;
    private int index;
    private HTML strTabTitle = null;
    private HandlerClickListaConferencia handler;

    public ViewListaConferencia(HandlerClickListaConferencia handler) {
        this("Confer\u00eancias Abertas", 0, handler);
    }

    public ViewListaConferencia(String title, int index, HandlerClickListaConferencia handler) {

        this.handler = handler;
        initPanel();
        this.strTabTitle = new HTML(title);
        this.index = index;
        panelListaConferencia.setHeight("500px");
        initWidget(panelListaConferencia);
    }

    /**
     * @return the conferencias
     */
    private List<ConferenciaTO> getConferencias() {
        return conferencias;
    }

    /**
     * montarGridConferencias
     */
    public void montar(List<ConferenciaTO> conferencias) {
        this.conferencias = conferencias;
        
        
        //adequa estado da UI
        if (conferencias != null && !conferencias.isEmpty()) {
            montarGrid();
        } else {
           // outer.getControladoraConferencia().setMensagemErro("N\u00e3o h\u00e1 confer\u00eancias abertas.");
        }
    }

    private void montarGrid() {
        gridListaConferencia.clearGrid();
        if (conferencias != null && !conferencias.isEmpty()) {
            gridListaConferencia.addHeader(1, "  T\u00edtulo  ");
            gridListaConferencia.addHeader(2, "  In\u00edcio  ");
            gridListaConferencia.addHeader(3, "  T\u00e9rmino  ");
            RowFormatter rowFormatter = gridListaConferencia.getRowFormatter();
            ConferenciaTO conferencia;
            for (int row = 0; row < conferencias.size(); row++) {
                conferencia = conferencias.get(row);
                if (row + 1 % 2 == 0) {
                    rowFormatter.setStyleName(row + 1, HoverGridWidget.STYLE_ROW_EVEN);
                } else {
                    rowFormatter.setStyleName(row + 1, HoverGridWidget.STYLE_ROW_ODD);
                }
                gridListaConferencia.setId(row + 1, String.valueOf(conferencia.getId()));
                gridListaConferencia.setHTML(row + 1, 1, "<label id='" + conferencia.getTitulo() + "'>" + conferencia.getTitulo() + "</label>");
                gridListaConferencia.setText(row + 1, 2, ViewUtil._dtTimeFormat.format(conferencia.getInicio()));
                gridListaConferencia.setText(row + 1, 3, ViewUtil._dtTimeFormat.format(conferencia.getTermino()));
            }
        }
    }

    private void initPanel() {
        panelListaConferencia.setWidth("100%");
        panelListaConferencia.setSpacing(8);
        panelListaConferencia.add(new LabelCampoForm("Selecione a confer\u00eancia desejada"));
        initGridListaConferencia();
        panelListaConferencia.add(gridListaConferencia);
        panelListaConferencia.setCellWidth(gridListaConferencia, "100%");
        
    }

    protected void initGridListaConferencia() {
        gridListaConferencia.setHoverStyleName("grid-hover");
        gridListaConferencia.setWidth(600 + "px");
        gridListaConferencia.addClickHandler(new ClickHandler() {

            private int index;
            private boolean visible;

            @Override
            public void onClick(ClickEvent event) {
                Cell cell = gridListaConferencia.getCellForEvent(event);
                int i = cell.getRowIndex() - 1;
                if (this.index == i && visible) {
                    visible = false;
                } else {
                    visible = true;
                    ConferenciaTO to = getConferencias().get(i);
                    handler.handle(to);
                }
                this.index = i;
            }
        });
    }

    /**
     * @return the strTabTitle
     */
    public HTML getStrTabTitle() {
        return strTabTitle;
    }



    public interface HandlerClickListaConferencia{
        public void handle(ConferenciaTO to);
    }
}
